home *** CD-ROM | disk | FTP | other *** search
/ Aminet 15 / Aminet 15 - Nov 1996.iso / Aminet / dev / basic / ace24dist.lha / ace24.lha / SUBmods / RunProg / RunProg.b < prev    next >
Text File  |  1996-09-11  |  1KB  |  45 lines

  1. /*
  2. ** Load and execute a program with control over stack size and
  3. ** retrieval of the AmigaDOS return code (neither of which ACE's 
  4. ** SYSTEM command gives you). Requires version 36 or higher of the 
  5. ** OS (Wb 2.x/3.x). RunProg returns -1 if an error occurs when
  6. ** attempting to run the program.
  7. ** 
  8. ** Author: David J Benn
  9. **   Date: 4th-6th March 1995
  10. */
  11.  
  12. CONST null = 0&
  13. CONST bad = -1&
  14.  
  15. SUB LONGINT RunProg(STRING theProg, STRING theArgs, LONGINT stackSize) EXTERNAL
  16. {*
  17. ** Declare shared library functions.
  18. *}
  19. DECLARE FUNCTION ADDRESS LoadSeg(STRING loadFile) LIBRARY dos
  20. DECLARE FUNCTION UnLoadSeg(ADDRESS segList) LIBRARY dos
  21. DECLARE FUNCTION LONGINT RunCommand(ADDRESS segList, LONGINT stackSize, ~
  22.                         ADDRESS argPtr, LONGINT argSize) LIBRARY dos
  23. {*
  24. ** Segment list address, AmigaDOS return code.
  25. *}
  26. ADDRESS segList
  27. LONGINT result
  28.  
  29.   IF theProg = "" THEN
  30.     RunProg = bad 
  31.   ELSE
  32.     segList = LoadSeg(theProg)
  33.     IF segList = null THEN
  34.       RunProg = bad
  35.     ELSE
  36.       IF theArgs <> "" AND RIGHT$(theArgs,1) <> CHR$(10) THEN 
  37.     theArgs = theArgs+CHR$(10)
  38.       END IF
  39.       result = RunCommand(segList,stackSize,theArgs,LEN(theArgs))
  40.       UnLoadSeg(segList)  {* I assume RunCommand() does not do this! *}
  41.       RunProg = result
  42.     END IF
  43.   END IF
  44. END SUB
  45.